<?php

namespace app\common\library;

class Arr
{
    /**
     * ascii排序并转字符串
     * @param $params
     * @param $exclude_str_arr
     * @return false|string|void
     */
    public static function ascii($params = array(), $exclude_str_arr = [])
    {
        if (empty($params)) {
            return false;
        }
        if (ksort($params)) {
            $str = '';
            foreach ($params as $k => $val) {
                if (!in_array($k, $exclude_str_arr)) {
                    if (is_array($val)) {
                        $val = json_encode($val);
                    }
                    $str .= $k . '=' . $val . '&';
                }
            }
            $strs = rtrim($str, '&');
            return $strs;
        }
    }

    //将数组的某个值设为key
    public static function array_index($array, $name)
    {
        $indexedArray = array();
        if (empty($array)) {
            return $indexedArray;
        }

        foreach ($array as $item) {
            if (isset($item[$name])) {
                $indexedArray[$item[$name]] = $item;
            }
        }
        return $indexedArray;
    }

    /**
     * Notes：返回数据指定值的键值对
     * @param array  $arr   数组
     * @param string $key   指定键值用, 分割 如字段不一致 用 新键名|原键名
     * @param bool   $empty_value   是否取空值
     * @return array
     * @author
     */
    public static function arrayParameterValues(array $arr,string $key,bool $empty_value=true):array
    {
        [$array, $res] = [explode(",",$key), []];
        foreach($array as $rs){
            if(substr_count($rs,"|")){
                $c= explode("|",$rs);
                if(isset($arr[$c[1]])){
                    /* 是否取空值 */
                    if(!empty($arr[$c[1]]) || $empty_value){
                        $res[$c[0]] = $arr[$c[1]];
                    }
                }
            }else{
                if(isset($arr[$rs])){
                    /* 是否取空值 */
                    if(!empty($arr[$rs]) || $empty_value){
                        $res[$rs] = $arr[$rs];
                    }
                }
            }
        }
        return $res;
    }

    /**
     * Notes：给对象赋予指定值的数据属性
     * @param array  $arr   数组
     * @param string $key   指定键值用, 分割 如字段不一致 用 新键名|原键名
     * @param object   $obj   要处理的对象
     * @param bool   $empty_value   是否取空值
     * @return object
     * @author
     */
    public static function objectParameterValues(array $arr,string $key, object $obj,bool $empty_value=true):object
    {
        $array = explode(",",$key);
        foreach($array as $rs){
            if(substr_count($rs,"|")){
                $c= explode("|",$rs);
                if(isset($arr[$c[1]])){
                    /* 是否取空值 */
                    if(!empty($arr[$c[1]]) || $empty_value){
                        $obj->{$c[0]} = $arr[$c[1]];
                    }
                }
            }else{
                if(isset($arr[$rs])){
                    /* 是否取空值 */
                    if(!empty($arr[$rs]) || $empty_value){
                        $obj->{$rs} = $arr[$rs];
                    }
                }
            }
        }
        return $obj;
    }
}